#!/bin/bash
#功能函数
funcs=./functions.sh
if test ! -f $funcs; then
    funcs=`which functions.sh`
    if [ "$funcs" = "" ]; then
        echo "functions.sh not exist!!"
        return
    else
        echo "funcs=$funcs"
	. $funcs
    fi
else
    echo "funcs=$funcs"
    . $funcs  
fi


#默认配置参数
################################
#必须设置的变量
default_vpn_name=vpnsmartphone
################################
function print_default_args()
{
echoTextBlue "
The default parameters are as follows：
--------------------------------------
default_vpn_name        = $default_vpn_name
--------------------------------------
"
echoTextRed "
用法:   
"
}




function config_vpn()
{
    #sudo apt-get install ppp
    sourcs_list=/tmp/sources.list
    touch /tmp/sources.list
    result=`cat $sourcs_list | grep pptpconfig`
    if [ -n "$result" ]; then
       sed -i "/pptpconfig/c\
       deb http://quozl.netrek.org/pptp/pptpconfig ./"          $sourcs_list
    else
       echo "deb http://quozl.netrek.org/pptp/pptpconfig ./" >> $sourcs_list
    fi
}

###hamachic 相关
function install_hamachic_for_ubuntu()
{
    #客户端
    echoTextBlue "install hamachic ...... "
    sh_wget http://files.hamachi.cc/linux/hamachi-0.9.9.9-20-lnx.tar.gz  /tmp/
    tar -xvf /tmp/hamachi-0.9.9.9-20-lnx.tar.gz -C /tmp/
    cd /tmp/hamachi-0.9.9.9-20-lnx; sudo make install;cd -
}
function install_hamachic_for_red_hat()
{
    #客户端
    echoTextBlue "install hamachic ...... "
    sh_wget http://files.hamachi.cc/linux/hamachi-0.9.9.9-20-lnx.tar.gz  /tmp/
    tar -xvf /tmp/hamachi-0.9.9.9-20-lnx.tar.gz -C /tmp/
    cd /tmp/hamachi-0.9.9.9-20-lnx/tuncfg
    sed -i "s###g" tuncfg.c ; rm -rf tuncfg; make; cd -
    sudo make install; cd -
}



function install_hamachic_client()
{
    echoTextBlue "install hamachic client ......"
    result=`which hamachi`
    if [ -z "$result" ]; then
        install_hamachic_for_ubuntu
    else
        result=`question "hamachi exsit,reinstall now ? " 1  yes`
	if [ "$result" = "yes" ] ; then
	    install_hamachic_for_ubuntu
        fi
    fi

    #启动虚拟网卡
    #ls -l /dev/net/tun  如果没有tun 参考(http://ubuntuforums.org/showthread.php?t=135036)
    echoTextBlue "sudo /sbin/tuncfg ......启动 tun 虚拟网卡"
    sudo modprobe tun    #要求内核支持tunnel
    sudo /sbin/tuncfg

    
    echoTextBlue "hamachi-init 初始化密钥...... "
    #初始化密钥之类,要开始使用Hamachi你必须运行 (会产生 ~/.hamachi 目录, 仅需执行一次)
    if test -d ~/.hamachi; then
        result=`question "~/.hamachi exsit are you rm it and reset now ? " 1  yes`
        if [ "$result" = "yes" ] ; then
	    rm -rf ~/.hamachi
            hamachi-init
        fi
    else
        hamachi-init
    fi

    #初始化完成后中，通过 hamachi start 可以启动服务                            
    echoTextBlue "hamachi start"
    hamachi start   

}

function get_hamachi_nickname()
{
    local nickname=
    nickname=`which hamachi`
    if [ -z "$nickname" ]; then
	echo "$nickname"
        return
    fi
    nickname=`hamachi |grep nickname |awk '{print $3}'`
    echo "$nickname"
}


function get_hamachi_group_name()
{
    local group_name=
    HAMACHI=`which hamachi`
    if [ -z "$HAMACHI" ]; then
	echo "$group_name"
        return
    fi
    group_name=`hamachi list|grep "\[" |tr -d " "|tr -d '[' |tr -d ']'`
    echo "$group_name"
}




function install_hamachic_server()
{
    echoTextBlue "install hamachic server ......"
    result=`which hamachi`
    if [ -z "$result" ]; then
        install_hamachic_for_ubuntu
    else
        result=`question "hamachi exsit,reinstall now ? " 1  yes`
	if [ "$result" = "yes" ] ; then
	    install_hamachic_for_ubuntu
        fi
    fi

    #启动虚拟网卡
    #ls -l /dev/net/tun  如果没有tun 参考(http://ubuntuforums.org/showthread.php?t=135036)
    echoTextBlue "sudo /sbin/tuncfg ......启动 tun 虚拟网卡"
    sudo modprobe tun    #要求内核支持tunnel
    sudo /sbin/tuncfg

    
    echoTextBlue "hamachi-init 初始化密钥...... "
    #初始化密钥之类,要开始使用Hamachi你必须运行 (会产生 ~/.hamachi 目录, 仅需执行一次)
    if test -d ~/.hamachi; then
        result=`question "~/.hamachi exsit are you rm it and reset now ? " 1  yes`
        if [ "$result" = "yes" ] ; then
	    rm -rf ~/.hamachi
            hamachi-init
        fi
    else
        hamachi-init
    fi

    #初始化完成后中，通过 hamachi start 可以启动服务                            
    echoTextBlue "hamachi start"
    hamachi start   

    #登入 Hamachi 网路                                 
    echoTextBlue "hamachi login ......"
    hamachi login                                    #由于你是第一次启动，你要告诉你的客户端来连接了。命令：  

    #让用户修改 nickname
    nickname=`get_hamachi_nickname`
    if [ -n "$nickname" ]; then
        nickname=`question  "Rest nickname ?"  2 $nickname`
    fi

    group_name=`get_hamachi_group_name`
    echo "group_name=$group_name"


    sh_dpkg_install "upx-ucl"              #这个很重要,一个强大的基于命令行的执行文件压缩工具 
    cd /usr/bin
    sudo upx -d hamachi

    group_name=`get_hamachi_group_name`
    if [ -z "$group_name" ]; then
        group_name=`question  "Please enter group name："  2 $group_name`
        group_pwd=`question  "Please enter group name："  2 "123"`
        hamachi create $group_name  $group_pwd   #vpnsmartphone 创建的网络名称, bbk1234 密码 
    else
        echoTextRed "current group name =$group_name"
    fi
    
#TQ【VLAN】及【hamachi】联机教程(供不会联的朋友)
#http://www.netpk.com/bbs/viewthread.php?tid=371&page=1
#LogMeIn Hamachi² 快速入门指南 (pdf)
#https://secure.logmein.com/welcome/documentation/EN/pdf/Hamachi2/LogMeIn_Hamachi2_GettingStarted.pdf
Hamachi on Linux 安装
http://hi.baidu.com/88370827/blog/item/c75ea465d461a5faf7365489.html
}





function aaaaa()
{
    hamachi join   vpnsmartphone  bbk1234   #加入已经创建好的网络 vpnsmartphone  密码 bbk1234 
    hamachi go-online  vpnsmartphone        #连接后还需要这个来上线
}

function create_hamachi_script()
{
echoTextBlue "create hamachi script ......"
cat >/tmp/hamachi<<EOF
#!/bin/bash
hamachi_start() 
{  
    echo "Starting hamachi..." 
    /sbin/tuncfg  
    /usr/bin/hamachi  start  
 #   /bin/chmod 760 /var/run/tuncfg.sock  
 #   /bin/chgrp hamachi /var/run/tuncfg.sock
}

hamachi_stop() 
{  
    echo "Stopping hamachi..."  
    killall tuncfg  
    /usr/bin/hamachi  stop
}

hamachi_restart() 
{  
    hamachi_stop  sleep 1  
    hamachi_start
}
echo "aaa=$1"
case "\$1" in
    'start')  
           hamachi_start  
           ;;
     'stop') 
           hamachi_stop  
           ;;
     'restart')  
           hamachi_restart  
           ;;
      *)  
          hamachi_start
          esac
EOF
chmod 755 /tmp/hamachi
sudo cp /tmp/hamachi /etc/init.d/ -rf

result=`cat /etc/modules |grep tun -w`
if [ -z "$result" ]; then
    sudo sh -c 'echo "tun" >> /etc/modules'
    #tun 开机自动启动
fi
}

function install_vncviewer()
{
    sudo apt-get install  vncviewer
}
###hamachic 相关end



function config_vpnd()
{
    sudo apt-get install ppp
    deb http://quozl.netrek.org/pptp/pptpconfig ./ 
}




#脚本入口：解析参数
print_default_args
while test $# != 0
do
    case $1 in
	-r)
	    shift
	    version=$1
	    ;;
	-m)
	    shift
	    mode=$1
	    ;;
        *)
	    server_client=$1
	    ;;
       esac
       shift
done
if [ "$mode" == "auto" ]; then
    echo "auto"
    create_hamachi_script
    echoTextBlue "Please select the install mode"
    if [ "$server_client" = "server" ] || [ "$server_client" = "client" ]; then
	install_hamachic_$server_client
    else
        echoTextRed "$0 -m auto [server|client]"
        exit
    fi

    
else
    echo "mannul"
    create_hamachi_script
    echoTextBlue "Please select the install mode"
    menu_list="server  client"
    result=`sh_menu_select "$menu_list"`
    #eval "result=\$$result"
    echo "result=$result"
    install_hamachic_$result
fi
exit

#参考资料
ADSL的VPN解决方案，动态IP上的VPN
http://cisco.chinaitlab.com/vpn/520314_2.html

其中一个公司做VPN的服务端，申请花生壳做动态域名解析，路由器上可能还需要做端口的映射
另外一个就可以通过域名去连了。
不过建议不要用傻瓜的宽带路由器，既然有VPN的应用，说明你的网路不是简单的家用上Internet这样的需求。
可以考虑搞台破机器装RouterOS做路由器。虽然刚开始的配置稍微复杂些，不过实际应用起来还是功能很强大而且灵活的

http://www.onlinedown.net/soft/38395.htm
Hamachi 是一款利用 P2P 方式来进行文件传输的软件，它能够让使用者穿透防火墙或是 NAT 、 VPN 等网路环境，连接上一个虚拟的网路群组，使用者无论在何处，只要透过 Hamachi 连接上该群组，就能够与群组中的电脑进行文件的分享。相信许多使用者看到这里会开始怀疑安全性的问题，关於这点， Hamachi 早就为你想好了。 Hamachi 提供的是一种加密的资料传输，不像 BT 等 P2P 采用非加密的档案传输方式，因此在资料的交换上更有保障，不需要担心资料曝光的困扰。  


linux 下 hamachi 的安装使用
http://www.99way.com/blog/archive/linux-%E4%B8%8B-hamachi-%E7%9A%84%E5%AE%89%E8%A3%85%E4%BD%BF%E7%94%A8.htm

ubuntu 7.10 玩转VPN （hamachi）
http://blog.donews.com/gradetwo/archive/2007/10/27/1223334.aspx




